﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace Universe.OneC.ConsoleSample
{
    class TestLargeScript
    {
        static  Random rand = new Random(1);
        
        public static void Run(Adapter1C adapter)
        {
            // object obj1 = adapter.GlobalProperty("ИнтеграцияBioTime");
            double n = 5;
            object man = adapter.NewObject("ВнешниеОбработкиМенеджер");
            object myExt = man.Call("Создать", @"C:\ИнтеграцияСBioTime.epf");
            object ret1 = myExt.Call("Исполнить", "AAA = 54;");
            Console.WriteLine(ret1);

            
            
            while (n < 1000000)
            {
                // object gm = adapter.GlobalProperty("ОбщийМодуль2");
                // adapter.GlobalMethod("Исполнение", "");

                // object epfMan = adapter.NewObject("ВнешниеОбработкиМенеджер");
                // epfMan.Call("Создать", @"c:\ОбработкаBioLink.epf");

                
                // adapter.GlobalMethod("Исполнить", "AA=56;");

                // return;

                
                string code = BuildCode((int)n);
                DateTime start = DateTime.Now;
                // obj1.Call("Исполнить", code);

                object retVal = adapter.GlobalMethod("Привет", "ASD = 5;");
                Console.WriteLine(retVal);

                Program.DumpInterval(ref start, "Исполнение кода размером " + code.Length / 1024 + "K");
                if (code.Length > 200000000)
                {
                    File.WriteAllText("script.1c", code, Encoding.GetEncoding(1251));
                    break;
                }

                // adapter.GlobalMethod("Выполнить", code);
                n = n*1.2d;
            }
        }

        static string BuildCode(int n)
        {
            StringBuilder ret = new StringBuilder();
            ret.AppendLine("Табель = Новый Массив;");
            for(int i=1; i<=n; i++)
            {
                ret.AppendFormat(@"
Сотрудник{0} = Новый Структура;
Сотрудник{0}.Вставить(""ФИО"", ""{1}"");
Сотрудник{0}.Вставить(""Табельный_Номер"", ""{2}"");
Сотрудник{0}.Вставить(""Код_Отдела"", ""{3}"");
Сотрудник{0}.Вставить(""Код_Организации"", ""{4}"");
Сотрудник{0}.Вставить(""Итого_Вид1"", {5});
Сотрудник{0}.Вставить(""Итого_Вид1_Дни"", 15);
Сотрудник{0}.Вставить(""Итого_Вид1_Часы"", 120);
Сотрудник{0}.Вставить(""Итого_Вид2"", {6});
Сотрудник{0}.Вставить(""Итого_Вид2_Дни"", 7);
Сотрудник{0}.Вставить(""Итого_Вид2_Часы"", 56);
Табель.Добавить(Сотрудник{0});
",
 i,
 RandomString(30),
 RandomString(10),
 RandomString(5),
 RandomString(8),
 rand.Next(1,1111),
 rand.Next(1,2222)
 );
            }

            return ret.ToString();

        }
        static string RandomString(int length)
        {
            StringBuilder ret = new StringBuilder();
            for (int i = 1; i <= length; i++)
                ret.Append(
                    (char) (rand.Next(25) + 65)
                    );

            return ret.ToString();
        }
    }
}
